#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
安全的constants_v2.py修复脚本
仅修复类型不匹配和添加缺失字段，保留所有原有配置
"""
import sys
import os
import re

# 根据MySQL检查报告确定的需要修复的问题
FIXES_TO_APPLY = [
    # 类型不匹配修复（MySQL中tinyint(1)应该对应bool类型）
    {
        'table': 'intervention_records',
        'field': 'aigiu',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool',  # 实际上MySQL是tinyint(1)，对应bool
        'note': 'MySQL tinyint(1) = bool'
    },
    {
        'table': 'intervention_records', 
        'field': 'baoguan',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'erxue_yawan', 
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'guasha',
        'action': 'fix_type', 
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'is_home_intervention',
        'action': 'fix_type',
        'from_type': 'bool', 
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'is_imported',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'reci_pulse',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records', 
        'field': 'rejiu_training',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'intervention_records',
        'field': 'zhongyao_xunzheng',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    # patient_reaction字段类型修复：MySQL是json，当前配置是string，已经修复过了
    
    # student_extensions表布尔字段修复
    {
        'table': 'student_extensions',
        'field': 'contact_lenses',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'student_extensions', 
        'field': 'frame_glasses',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    },
    {
        'table': 'student_extensions',
        'field': 'night_orthokeratology',
        'action': 'fix_type',
        'from_type': 'bool',
        'to_type': 'bool'
    }
]

def verify_backup_exists():
    """验证备份文件存在"""
    backup_file = 'backend/config/constants_v2_backup.py'
    if not os.path.exists(backup_file):
        print("❌ 备份文件不存在！请先创建备份")
        return False
    print(f"✅ 备份文件存在: {backup_file}")
    return True

def check_current_config():
    """检查当前配置状态"""
    print("🔍 检查当前配置状态...")
    
    # 读取当前配置文件
    with open('backend/config/constants_v2.py', 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 检查几个关键配置是否存在
    checks = [
        ('ALL_FIELD_CONFIG_REGISTRY', 'ALL_FIELD_CONFIG_REGISTRY' in content),
        ('intervention_records配置', '"intervention_records"' in content),
        ('student_extensions配置', '"student_extensions"' in content),
        ('显示名称配置', 'display_name' in content)
    ]
    
    all_ok = True
    for check_name, result in checks:
        if result:
            print(f"✅ {check_name}: 存在")
        else:
            print(f"❌ {check_name}: 缺失")
            all_ok = False
    
    return all_ok

def main():
    """主函数 - 当前只做验证，不做修改"""
    print("🔒 安全的constants_v2.py检查工具")
    print("=" * 50)
    
    # 验证备份
    if not verify_backup_exists():
        return False
    
    # 检查当前配置
    if not check_current_config():
        print("❌ 当前配置文件存在问题")
        return False
    
    print("\n📋 需要修复的问题清单:")
    for i, fix in enumerate(FIXES_TO_APPLY, 1):
        print(f"{i:2d}. 表:{fix['table']} 字段:{fix['field']} 操作:{fix['action']}")
    
    print(f"\n📊 总计需要修复 {len(FIXES_TO_APPLY)} 个问题")
    print("\n⚠️  当前模式：仅检查，不修改")
    print("💡 请手动确认每个修复操作，确保安全")
    
    return True

if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)
